/**
 * 
 */
package org.yelongframework.model.support.gson;

import org.yelongframework.json.gson.ClassExclusionStrategy;
import org.yelongframework.model.sql.model.SqlModel;
import org.yelongframework.model.sql.model.SqlModels;

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;

/**
 * 对于SQL模型进行转换JSON时，去除多余的字段
 * 
 * @see SqlModel
 * @since 1.0.0
 */
public class SqlModelExclusionStrategy implements ExclusionStrategy {

	/** 类型排除策略 */
	private ClassExclusionStrategy classExclusionStrategy;

	// ==================================================构造器==================================================

	public SqlModelExclusionStrategy() {
		classExclusionStrategy = new ClassExclusionStrategy();
		classExclusionStrategy.addIgnoreClassFields(SqlModel.class,
				SqlModels.SQLMODEL_FIELDNAMES.toArray(new String[] {}));
	}

	// ==================================================跳过字段==================================================

	@Override
	public boolean shouldSkipField(FieldAttributes f) {
		return classExclusionStrategy.shouldSkipField(f);
	}

	// ==================================================跳过类==================================================

	@Override
	public boolean shouldSkipClass(Class<?> clazz) {
		return classExclusionStrategy.shouldSkipClass(clazz);
	}

	// ==================================================类型排除策略==================================================

	/**
	 * @return 类型排除策略
	 */
	public ClassExclusionStrategy getClassExclusionStrategy() {
		return classExclusionStrategy;
	}

	/**
	 * @param classExclusionStrategy 类型排除策略
	 */
	public void setClassExclusionStrategy(ClassExclusionStrategy classExclusionStrategy) {
		this.classExclusionStrategy = classExclusionStrategy;
	}

}
